package main

import "fmt"

/*
type 接口名 interface{
   方法声明
   方法名(参数) 返回值
}
*/
type Humaner interface {
	SayHi()
}

type P struct {
	Name string
	Age  int
}

type T struct {
	P
	Sub string
}

type S struct {
	P
	Score int
}

/**
实现接口
*/
func (t *T) SayHi() {
	fmt.Printf("我是%v,负责%v教学\n", t.Name, t.Sub)
}

/**
实现接口
*/
func (s *S) SayHi() {
	fmt.Printf("我是%v,Score:%v\n", s.Name, s.Score)
}

func main0401() {
	//t := T{
	//	P:   P{Name: "刘老师"},
	//	Sub: "Golang",
	//}
	s := S{
		P:     P{Name: "小米"},
		Score: 10,
	}
	//创建接口类型变量
	var h Humaner
	//将对象的地址赋值给接口类型
	h = &s
	//
	h.SayHi()
}

func main() {
	t := T{
		P:   P{Name: "刘老师"},
		Sub: "Golang",
	}
	//s := S{
	//	P:     P{Name: "小米"},
	//	Score: 10,
	//}
	SayHi(&t)
}

/*
多态 将接口类型作为函数参数
*/
func SayHi(h Humaner) {
	h.SayHi()
}
